{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 实现机器学习领域的Hello World任务--MNIST手写数字识别"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### - MNIST数据集简介"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "MNIST数据集是一个手写数字数据集，包含了0 ~ 9这10个数字，一共有7万张灰度图像，其中6万张训练数据，1万张测试数据。每张图像由28x28个像素点构成，每个像素点用一个灰度值表示，灰度值在0 ~ 1或0 ~ 255之间。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](https://raw.githubusercontent.com/datawhalechina/dive-into-cv-pytorch/master/markdown_imgs/chapter01/1.5_FC_MNIST_Classification/MNIST.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里使用full-connected layer神经网络（输入层、4个全连接层和输出层），输入层784个节点，第一个全连接层512个节点，第二个全连接层256个节点，第三个全连接层128个节点，第四个全连接层10个节点，输出层10个节点。激活函数使用ReLu。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### - 代码实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "from torch import optim\n",
    "from torch.autograd import Variable  #todo 是否有必要\n",
    "from torch.utils.data import DataLoader  #todo 作用？\n",
    "from torchvision.datasets import mnist   \n",
    "from torchvision import transforms  #todo transforms作用？\n",
    "import matplotlib.pyplot as plt  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义网络\n",
    "class Net(nn.Module):\n",
    "    def __init__(self, in_c=784, out_c=10):  #1x28x28，[c,w,h]\n",
    "        super(Net, self).__init__()\n",
    "        \n",
    "        #全连接层1\n",
    "        self.fc1 = nn.Linear(in_c, 512)  #定义了weight，后续入参x直接点乘\n",
    "        #激活层\n",
    "        self.act1 = nn.ReLU(inplace=True) #对全连接层1传递的tensor进行原值覆盖\n",
    "        \n",
    "        #全连接层2\n",
    "        self.fc2 = nn.Linear(512, 256)\n",
    "        #激活层\n",
    "        self.act2 = nn.ReLU(inplace=True)\n",
    "        \n",
    "        #全连接层3\n",
    "        self.fc3 = nn.Linear(256, 128)\n",
    "        #激活层\n",
    "        self.act3 = nn.ReLU(inplace=True)\n",
    "        \n",
    "        #全连接层4\n",
    "        self.fc4 = nn.Linear(128, out_c)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        x = self.act1(self.fc1(x))\n",
    "        x = self.act2(self.fc2(x))\n",
    "        x = self.act3(self.fc3(x))\n",
    "        x = self.fc4(x)\n",
    "        return x\n",
    "    \n",
    "net = Net()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 加载数据\n",
    "train_set = mnist.MNIST('./data', train=True, transform=transforms.ToTensor(), download=False)\n",
    "test_set = mnist.MNIST('./data', train=False, transform=transforms.ToTensor(), download=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# DataLoader\n",
    "train_data = DataLoader(train_set, batch_size=64, shuffle=True) #shuffle是要不要打乱顺序\n",
    "#batch_size 每个batch包含的数据个数\n",
    "test_data = DataLoader(test_set, batch_size=128, shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAATsAAAEGCAYAAAAaODK0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgJ0lEQVR4nO3de5RU1Zk28OeBbu6g3O1AI15AMaISEPE6OiwyeAsmahT9lExw0FGiTIyfoC7NOGOWl6hxFJ0PlYCKVzBeMl4GUWOMioAigh25KCLSgAKKolyafr8/6vQ5tcuu7urqqlPVtZ/fWqzeu/bp2hv65e1zdu2zD80MIiKlrlWhByAiEgclOxHxgpKdiHhByU5EvKBkJyJeULITES94l+xIftNIe3+SS5v4njNInlHP621JPkZyJcn5JPs3cbgiGYs5ti8i+T7JxSRfJ3lQU8cbN++SXczGA9hiZvsDuB3ATQUej0iuPGxmg83sMAA3A7itwONplLfJjmQnkvNIvhP8hhqT1FxGcibJJSRnk+wQfM9Qkn8huYjkiyQrGulmDICZQXk2gJEkmYe/jkgojtg2s61J1Y4Aiv7uBG+THYDtAH5qZj8CcAKAW5MS0QEAppnZIQC2AriYZDmAOwGcYWZDAUwHcEPqm5K8nuRPgmofAJ8CgJnVAPgKQPc8/p1EgHhiGyQvIbkKiTO7S/P6N8qBskIPoIAI4HckjwNQi0Ri6h20fWpmfwvKDyHxg3wBwMEA5gZx0xpAdeqbmtm1KX1875CcjF4kvThiG2Y2FcBUkucAuAbAuNz/VXLH52R3LoCeAIaa2S6SqwG0C9pSE5IhEUDLzOzIJvSxFkAlgLUkywDsAWBzs0Yt0rg4YjvZowDuyfJ7Y+PzZeweADYGwXACgL2T2vqRrPvBjwXwOoAPAfSse51kOckfNtLHM4h+250B4GXTzguSf3mPbZIDkqonA1iRs9Hnic/JbhaAYSQXIvGb8O9JbVUAxpFcAqAbgHvMbCcSCesmku8BWAzgqNQ3TZnXuB9Ad5IrAfwawOR8/WVEksQR2xNJLiO5GInYLupLWACgTjRExAc+n9mJiEeU7ETEC0p2IuKFZiU7kqNJfhjc+6nJdykZiu3Sk/UHFCRbA1gOYBQS68kWABhrZh+k+542bGvt0DGr/iS3vsaWL8ysZ6HHUYwU2y3XdmzDTttR7y2ZzVlUPBzASjP7CABIPorEvaBpA6IdOuIIjmxGl5IrL9nsTwo9hiKm2G6h5tu8tG3NuYwN7/sMrA1ec5CcQHIhyYW7sKMZ3YnERrFdgpqT7DK679PMppnZMDMbVo62zehOJDaK7RLUnGRXd99nnb4A1jVvOCJFQbFdgpqT7BYAGEByH5JtAJyNxL2gIi2dYrsEZf0BhZnVkJwI4EUktoSZbmbLcjYykQJRbJemZm3xZGbPAXguR2MRKRqK7dKjOyhExAtKdiLiBSU7EfGCkp2IeEHJTkS8oGQnIl5QshMRLyjZiYgXlOxExAtKdiLihWbdLuYjlrdJqbv/hGzfLix/d/h+Ttvq06Kdgwbdtslp271ydVSp3d3MUYpvav5xaEbHffxTN15bdY/24fuHfVc6bdMqX3Pqx71/Rlg+p98Cp63WovOm//qfk5y2ff/vmxmNLd90ZiciXlCyExEv6DI2A617dA/LVTfv47T97NB3nPrNe72eVHsp/Zue6lZ/dPPEsLzXHW80eYxSgoYPdqrVV9WE5VP2dnec+vde08JyLWqdtlZJ5zRNaatNORd6efBj9X5f6veOOfsWp22kXRGW972ycJe0OrMTES8o2YmIF5TsRMQLmrOrM+KQsLhyYmunaeqIh8PyqPZz89L9rmO3RpU73f61FMVPmwZ3curvHj41LNemPOyslfNANPcc5rqNQ9L20aftlrA8YY/VDX7fM48eE5Z3dHf7n5c0T9evzB239d2etv846cxORLygZCciXvDqMrasb/RQ91UT+jltN5w9Kyyf1vHLrPtYvis6ZR9Y3q6BI13vH/lAWB7y5LlOW59zPgnLtd9+m/XYpGXpfr+7TOOfProgq/dp/co7adsWd4mWUv1p6Cinre2KDU69z9poSdSm8Uemfc+3trvTLv3vq++Z4/HTmZ2IeEHJTkS8oGQnIl4o6Tm75Dk6ADhvXjTncGanZzN+n7nftQ/Ld392gtO2Zs6+Tn3PVbvC8s133e20DW2TsqQkjXcPn+XUT937rKhStSKj95DS09DcW7Z2b42WPKW+v+25h1Pf9kIU6/MHT3XaahH9H5n48clOWz7GnQ2d2YmIFxpNdiSnk9xIcmnSa91IziW5IvjaNb/DFMk9xbZfMrmMnQHgLgAPJL02GcA8M7uR5OSgfmXuh9d0rfePPkrfMrS303Zmp02ph4c21X4Xlo9++DdO28B7PgvLNavXOG29sd6pb/5l9JF8Z+5y2g6567Kw3G6zuwL9oSm3Rv2lLFk5ec5bYfnZQyucNtu1E5K1GWhBsR23rY92d+rzknY9Sd0R5bglPw/L3f6lOO6YSNXomZ2ZvQZgc8rLYwDMDMozAZyW22GJ5J9i2y/Zztn1NrNqAAi+9kp3IMkJJBeSXLgLO9IdJlIsFNslKu8fUJjZNDMbZmbDytE2392JxEax3bJku/RkA8kKM6smWQFgYy4H1RQc+kOnfv7Dz4Xl1Dm6p7btGZZnVh/ltG25Y++wvO+T7m06NUnl5F2LAWDn4L2deo9FX4blSy74ldPW96X0OxCfNCI6duWP73XaLtojul3svgvdLY573aVdjXOsaGI7DlvHjgjLt9/gLic5vK27ZCR5nm7g8xc6bQMvWBiWa1Ccsj2zewbAuKA8DsDTuRmOSMEptktUJktPHgHwJoADSK4lOR7AjQBGkVwBYFRQF2lRFNt+afQy1szGpmkameOxZKxV585h+Z8f+bPTdnrHaDPCLUnLSQDg99ddHJa7PPKW09YhZQlJOtbHna/+eLy7hGTA7dHvj/KXFmX0ngDQYUXSnM+P0x/31QD3oShpZ8+lUcUY2/n20c3ubiUfnHtXWG7sgTvJ7Z26u7vvbD91eFhu9+zbzR5nPugOChHxgpKdiHhByU5EvNAidz3ZfXC0+8LpHf+S9rgrP/snp546T5eNVl985dT3vde9tcsWuQ8vFolDw0tIop2Ca+HOIzf0oB63zW1fPPwhp6V2eDR3/e5/uXN/U8ZfFJbLXs58HjvXdGYnIl5QshMRL7SIy1gOO9ipX/rgY2mOBBbvjNZvrx/bPaX1m2aPpeazdU69VUpdpBDOueb5sDykbfolJFO/3M9pu2txtBlt+fL2Tluf19LvXrL6AnfJ1bH7rQzL0ypfddr6/W55WF43AgWjMzsR8YKSnYh4QclORLzQIubslp/f0amPbp/+QdFn/jnaPWTAx/PzNqZCufvkPzr12y8bVKCRSDF5YfTgsPz/znEfeNPui2h+LfXB2/vh3az6G/iu+zCeFY/2DMutKt0lK8lzeKdgaFb95YLO7ETEC0p2IuIFJTsR8UKLmLPrPeCLtG1ba921QL3fSL3FpTjx8MFO/buBmT3DYFR7d9uq23M2ImnJaj5dG5b73LS2gSNzI9snj3XBqvwOrAE6sxMRLyjZiYgXWsRl7JuHznHqu5PuVPmkprXTloudTXJl6znuvTFnXf1CWB7RfobTdnCb5Adqt0n7nge8Ot6pZ7t0QKQxrfd0l5ec+LfVYfniPWc7bcmXrtdtHOK0JT80u5AP49GZnYh4QclORLygZCciXmgRc3YtyZfnRU9vOuPK/3XafrXnR0m11CUy6efpBt89MSwfMGO101asDySWFmi4uxzqxD++5tQn7Blt45S6vCR566j3Tq102mrWfparETaLzuxExAtKdiLihRZxGfufXxzo1Kd0/yAsD2rj5utVs6KPvdsvdndeTdZ2i7vTatutUX29+xxh3HqK+3CRhpzQPtpVohPbNnCk6+4v9wnL02a4u1ZU3hrt3lJTuzvj9xRJVVbZ16l/dW80ffLK4BlOW+oDd5IvXQc+f6HTdtBvq8NysVy2ptKZnYh4QclORLzQaLIjWUnyFZJVJJeRvCx4vRvJuSRXBF+75n+4Irmj2PYLzazhA8gKABVm9g7JzgAWATgNwC8AbDazG0lOBtDVzK5s6L26sJsdwZFNHuSX57uTaCddHj0Y+5oeS5v8fgDwne106tstmgvr2ir9XF9z3PtV9JH8U+ef4LS1Wh3Neez+YlNe+k/2ks1eZGbD8t5RESuG2M6LlCUk1VdFC5SuO+h/nLafdNwSlmvhPpXs3R3uudCvp1wSljs/Vjy3ZSabb/Ow1TbXu/VRo2d2ZlZtZu8E5a8BVAHoA2AMgJnBYTORCBKRFkOx7ZcmzdmR7A9gCID5AHqbWTWQCBoAvdJ8zwSSC0ku3IXM9mwTiZtiu/RlvPSEZCcAcwBMMrOtZGabZJrZNADTgMSpfjaD3PMB9yEh81+MPj7f/4ajnLZ/Gf7XsHxl96q079mebVLq2YwMeOIbdxPDKX89PSx3+tDto/K+aDy2xb381oKSwilkbH9P8iXo2++nPSx1CcmqC/qF5Rnn3em0Hd42+vvUwh3mht3RZrB3b3L/Ly0a4p4LdUZxXrpmKqMzO5LlSATDLDN7Mnh5QzDnUTf3sTE/QxTJH8W2PzL5NJYA7gdQZWa3JTU9A2BcUB4H4OncD08kfxTbfsnkMvZoAOcBeJ/k4uC1qwDcCOBxkuMBrAFwZl5GKJI/im2PNLr0JJfi+Hi+VYcOYXnDuEOdti2HNH9mrOMn7u+Hyjvfc+q127Y1u484aOlJbmUb25vGu8uqnrzulrB88qIJTtv2FdHOwTeeNstpa2gJSaukC7jkh98AQM0T0Wcv3aa7c+MtUbOWnoiIlAIlOxHxQovY9aQpar/9Niz3vMc9Le+Zj/7y8J7ir35lncLyO8MfdNrKj4geLrXL3CmZ5B1Kjn//LKet07Udw3KX7y1nKdxzXOOmMzsR8YKSnYh4QclORLxQcnN2Ii1J9/vdeeVBlReH5RGj3fm1aZWvhuXU5SUHzIkeynTgNe5tkru3fgTRmZ2IeELJTkS8oMtYkSLS77dvhOV1v3XbTsHQtN83ANFDmbSDTv10ZiciXlCyExEvKNmJiBeU7ETEC0p2IuIFJTsR8YKSnYh4QclORLygZCciXlCyExEvxPrAHZKfA/gEQA8AX8TWccN8HcveZpaPzZu9FMT2NhRPLAF+xnbauI412YWdkguL5clWGovkSrH9/IppPMUwFl3GiogXlOxExAuFSnbTCtRvfTQWyZVi+/kV03gKPpaCzNmJiMRNl7Ei4gXvkh3Jbxpp709yaRPfcwbJM+p5/XaSi4M/y0l+2cThimQs5thuS/IxkitJzifZv4nDjV2syY7kaJIfBv9Ak+PsO+h/OoAOyT9wkt1IziW5guRcAF1y1Z+Z/ZuZHWZmhwG4E8CTSf1WknyFZBXJZSQvq288JLvmajySP4WMbZLTSW4E0D7ptXzH0XgAW8xsfwC3A7gp6Ldo4zq2ZEeyNYCpAE4EcBCAsSQPiqv/wAwA24PxdCI5D8AHAAYD+A2AeQD+FUAZyZkkl5CcTbJD8D1DSf6F5CKSL5KsaELfYwE8klSvAXC5mQ0CMALAJcG/x2QA88xsQDCe2H8pSNMUQWzPADA6aTydALwbjGU7gHWI4ihXsT0GwMygPBvASJJEMce1mcXyB8CRAF5Mqk8BMCWu/pP63QZgKRIPG+oC4EMAPwSwEkAFgFUADMDRwfHTkUiE5QDeANAzeP0sANOD8gwAZwTl6wH8JKXPvQFUA2jdwLieBjAqGE9F8FoFgA/j/jfSnybHVMFjG0B/ALuDchmAFUH89ADwcRBX/XMV28H/ob5J/a8C0KOecRVNXMf5dLE+AD5Nqq8FcESM/acigN8B2B/ALCTGZ0gEx6dm9rfguIcAXArgBQAHA5ib+AWG1kgkMIeZXVtPX2cDmG1m9T74KZjvGAJgPoDeZlYdvFc1yV5Z/v0kPsUY2/0AvAigFsBeAHYEbbmKbdbTr7O0o9jiOs5k1+g/TszOBdATwNdmdhjJ1QDaBW2p4zIkxr/MzI7Moq+zAVxSX0NwyTEHwCQz2xoEm7QsxRjbBDDUzHYFsV03R5ar2F4LoBLAWpJlAPYAsLmusRjjOs4PKOr+cer0RWIuoVD2ALARwAaSpyNxqdkTiZuV+5Gs+8GPBfA6EqfhPeteJ1lO8oeNdULyACQC7c162sqRCIhZZlb34cWGuvmS4OvG7P+KEpNijO1tAHqQPAGJ2K67CT9Xsf0MgHFB+QwAL1twjVqscR1nslsAYADJfUi2QeJs55kY+081C8AwJALjSgB/R+KHNhdAFYBxJJcA6AbgHjPbGbTfRPI9AIsBHJX6piSvJ/mTpJfGAni0LhCSjiOA+wFUmdltSU3JQTQOiTkPKW7FGNvfBuM6F8DnSMQ1kLvYvh9Ad5IrAfwawQcORR3XMU+ingRgORKTmVfHPUGJxKeh1QB2IfHbeDyA7kh8OrQi+NotprEcg8QlxBIkgmtx8O9TkPHoT7N/ngWLbcV1Zn90u5iIeMG7OyhExE9KdiLihWYlu0Lf/iWSL4rt0pP1nF1wi8xyJFZHr0Xik5+xZvZBuu9pw7bWDh2z6k9y62ts+cL0DIp6KbZbru3Yhp22o95Ffc1ZVDwcwEoz+wgASD6KxP1yaQOiHTriCI5sRpeSKy/Z7E8KPYYipthuoebbvLRtzbmMre8WmT6pB5GcQHIhyYW7wjtWRIqaYrsENSfZZXSLjJlNM7NhZjasHG2b0Z1IbBTbJag5ya7YbpERyRXFdglqTrIrtltkRHJFsV2Csv6AwsxqSE5EYhuZ1kjsf7UsZyMTKRDFdmlq1hZPZvYcgOdyNBaRoqHYLj26g0JEvKBkJyJeULITES8o2YmIF5TsRMQLSnYi4oU4ny4mIgWw/dThYbn6yNZO2/Pn3hKW9yvv1OD7/GjhWWH528XdnLa9r/3e86SKjs7sRMQLSnYi4gUlOxHxgubsREpA6x7dw/Lux9o7bY8OiB7f2qt1h5TvjOq7rbbBPhYMfSSqDHXbFp9XE5av+uhnTtu2u6OtADvOmd9gH/mkMzsR8YKSnYh4QZexIi3Q5/96pFO/fNLjYfnsTp+nHJ166RqZ+110yfvCV4Odtlv3ejvj8RzWJkolzx3obv23+rZvw/KZPa9w2nr+d3xLVnRmJyJeULITES8o2YmIFzRnF6PPL4rmWbbu7z6savee0Uf3H590X9r3GFV1qlNvNfLTNEdKS7d2ylFOfcSYJWH5zorfO237lUVzbzusxmkbPPvSsNx3nru8pP3678Jy6083Om3/ePhFace25lQ3fscMfTcs/673G05b/7JoznDW5FudtnNxeVjO9/ydzuxExAtKdiLiBV3GNtH6Se6lxXe9Ui5HK7eH5XdOuNtp68BFYblVvc9hDt7je49jFh89MOEPTj15eQfg3iXxje0Iy0OemuS0DZj0Vto+kkOtJqWt3bMb0n7fwGfdelVS+eCpv3Laloy5I/q+8nZO26WT5oTlx5842GnbvWlz2v6zoTM7EfGCkp2IeEHJTkS8oDm7OsOjW2UmPPS00/SjtuvC8g/KFjhtZXB3fnW1zcnQFu+MZlPKTnZvBWp4nwppabaMi5YnVZb9LaU1/X/XP341KCwPmFi4nUUAYMAlbv/HLvt1WJ4yaZbTdl7n9WF51uNHOG2tRmrOTkSkyRpNdiSnk9xIcmnSa91IziW5IvjaNb/DFMk9xbZfaNbwOgeSxwH4BsADZnZw8NrNADab2Y0kJwPoamZXNtZZF3azIzgyB8POjh11aFi+cMafnLbkS9V+Zel3iYjDX7e7lyu3HD0qLNesT78coClestmLzGxYTt6shSrG2H5x3eKw3NBmmi9858bonWPPDMu24P1mjyNfVv5hhFNffma0PGvBDjcXXbdvyg6hGZhv87DVNte7rqvRMzszew1A6sXzGAAzg/JMAKc1eVQiBabY9ku2c3a9zawaAIKvvdIdSHICyYUkF+7CjnSHiRQLxXaJyvsHFGY2zcyGmdmw8hx9OilSDBTbLUu2S082kKwws2qSFQA2NvodBWBHHurUr3rwwbB8bLvUm2Oym6cb/fcxTn1y/+fC8vHtdmX8PicsPT0sd75wt9NWs35NVmOTrLSI2L7xinFOvcOCwi43yVSfV1PmIc+s/7h8yPbM7hkAdf/a4wA83cCxIi2JYrtEZbL05BEAbwI4gORakuMB3AhgFMkVAEYFdZEWRbHtl0YvY81sbJqmwq0hydBlDz7m1L9/6Vq/Z7/t4tSvePK8sDzgAffDu/KUpTsfPNE3LB/f7uO0fayq+c6pt7qjR1iuWb0g9XDJg5Yc261qtDVOU+kOChHxgpKdiHhByU5EvFDSu57ceebpTv3qY/YIy21Gu7uHbFkazZkNuHe907bvyuhBIO6iEGDNte7OxRfvmX6e7t6vKsPy0z8/1mlru1TzdCL5pDM7EfGCkp2IeKGkL2Pt3WVOvfe7SZU73WO7YkVYTr1UTbb5zwOd+txDbk45Iv2dGFNnRHdb/GDpG2mPE38N/Et0Z0TVcX9Me9zmX37j1H/wbJoDW5BBbXY69TW/jaaI+v22+f9fdGYnIl5QshMRLyjZiYgXSnrOLlfWXRHNHTyfMkdX0Tr9HN3geyY69f4zV4blhuYFxV/73B7tCrLmqG+dtuQdtH+273tO29udu4Xl2q+/ztPo8qsT3W2y2hy2JafvrzM7EfGCkp2IeEHJTkS8oDm7emw73X1Y7/O/iubpUufolu1y1waN+330QOB9Zq9y2mo2FOWmt1JM3o6eDLa5to3T1C+pfG0P9wliR/z8krDc/f43Uaw+PTn91lRratw5yp53tM9p3zqzExEvKNmJiBd0GVuPz4e4vwMaWl5y42cnOvVed0W3tWS2L7JIafv0mmjp1j0n3J/2uNPfG+/Ue77yTk7HoTM7EfGCkp2IeEHJTkS8oDm7wLYzouUm886/JaU1/ZzdsscHOfW9oK2bJDfOnzbJqS+ZeFfaY/9zyvSwfPuys9zGt5bkcliNWvcbd/fuB8f/ISwf1sZNOclLt7rc4z7VL9d0ZiciXlCyExEveHsZW1axl1PfMCzK+w0tNTl1+SlOve/jHzl1LTeRXOm63N0bZ3XSHQb9y9wYHdU+6aHrD7kPh7/9nJ9HlbfdOy+aolXnzmH587MOdtq+PGF7WK463t0GvFVSmlm00/07nfVKtDPQwOfz+9ApndmJiBcaTXYkK0m+QrKK5DKSlwWvdyM5l+SK4GvX/A9XJHcU237J5MyuBsDlZjYIwAgAl5A8CMBkAPPMbACAeUFdpCVRbHuk0Tk7M6sGUB2UvyZZBaAPgDEAjg8OmwngVQBX5mWUebBzYIVTf+rs25Jq7o6pyXb8h/t9ZdWLcjksiVGxx3bHOfOd+mn/Z0JYfnzIfU7bwPJ2YdmZvwOw++EnwvLLXx2U9Xi6lG0Ky9f0mNrAkUzbMm7hL536wF8uzHo8TdWkOTuS/QEMATAfQO8gWOqCplea75lAciHJhbuwo5nDFckPxXbpyzjZkewEYA6ASWa2NdPvM7NpZjbMzIaVN3DGJFIoim0/ZLT0hGQ5EsEwy8yeDF7eQLLCzKpJVgAo+p0pd/14WFg+8IalTtuB5emDddAD0caIAz78xGnTUpOWrSXF9g9++kFYPveiy522J6ZEd/2kLksZ3f7bpHJ8l411/uH9M8LyPhM3OG1xPngqk09jCeB+AFVmljyx9QyAuseXjwPwdO6HJ5I/im2/ZHJmdzSA8wC8T3Jx8NpVAG4E8DjJ8QDWADgzLyMUyR/Ftkcy+TT2daT/eGVkbocjEh/Ftl+8ul2s3dsrwvK53TPfnaT/n6OP8ms+W5fTMYlko+d/uw/V+cXGaA6v3SVujP7HPk+F5cPbpl8W0hSpD8fZsDt6OM7VH/3Uaety7pdhefemzTnpPxu6XUxEvKBkJyJeKOnL2ORdGgBg1RXR6vERbV9J+31ba7c7de6uze3ARHKsw5NJd1s86bZdh6Fh+ZPrj3TaLMvTncp57iLq1kkPxynDGqctzuUlDdGZnYh4QclORLygZCciXijpObsdRx7g1F89L/lBOul3I35oq/sQnbL1X4Zl3R4mLdne177Z+EElSmd2IuIFJTsR8UJJX8aWX7neqfdq4EE6138xOCw/f9txTlvX1f6e+ouUCp3ZiYgXlOxExAtKdiLihZKes9t1k/sg7I33RTs1pM7f/enjQ8JyxUzN0YmUGp3ZiYgXlOxExAslfRlb/r/uw0V+0e+YtMdWoCrfwxGRAtKZnYh4QclORLygZCciXqCZxdcZ+TmATwD0APBFbB03zNex7G1mPWPqq+QFsb0NxRNLgJ+xnTauY012YafkQjMbFnvH9dBYJFeK7edXTOMphrHoMlZEvKBkJyJeKFSym1agfuujsUiuFNvPr5jGU/CxFGTOTkQkbrqMFREvKNmJiBdiTXYkR5P8kORKkpPj7DvofzrJjSSXJr3WjeRckiuCr11jGkslyVdIVpFcRvKyQo5HmqeQsa24zkxsyY5kawBTAZwI4CAAY0keFFf/gRkARqe8NhnAPDMbAGBeUI9DDYDLzWwQgBEALgn+PQo1HslSEcT2DCiuGxXnmd1wACvN7CMz2wngUQBjYuwfZvYagM0pL48BMDMozwRwWkxjqTazd4Ly1wCqAPQp1HikWQoa24rrzMSZ7PoA+DSpvjZ4rdB6m1k1kPhBAegV9wBI9gcwBMD8YhiPNFkxxnbB46jY4jrOZMd6XvN+3QvJTgDmAJhkZlsLPR7JimI7RTHGdZzJbi2AyqR6XwDrYuw/nQ0kKwAg+Loxro5JliMRELPM7MlCj0eyVoyxrbhOEWeyWwBgAMl9SLYBcDaAZ2LsP51nAIwLyuMAPB1HpyQJ4H4AVWZ2W6HHI81SjLGtuE5lZrH9AXASgOUAVgG4Os6+g/4fAVANYBcSv43HA+iOxKdDK4Kv3WIayzFIXOosAbA4+HNSocajP83+eRYsthXXmf3R7WIi4gXdQSEiXlCyExEvKNmJiBeU7ETEC0p2IuIFJTsR8YKSnYh44f8DGSjX4x/PdPwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化数据\n",
    "import random\n",
    "for i in range(4):\n",
    "    ax = plt.subplot(2, 2, i+1)\n",
    "    idx = np.random.randint(0, len(train_set))  \n",
    "    #python 自带的random.randint(a,b)是[a,b]内的随机分布，np.random.randint(a,b)是[a,b)的随机分布 平均分布随机函数\n",
    "    digit_0 = train_set[idx][0].numpy()\n",
    "    digit_0_image = digit_0.reshape(28, 28)\n",
    "    ax.imshow(digit_0_image, interpolation='nearest')\n",
    "    ax.set_title('label:{}'.format(train_set[idx][1]), fontsize=10, color='black')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义损失函数--采用交叉熵 1/n \\sum(t_i * log(y_i))\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "# 定义优化器  梯度下降法GD/SGC\n",
    "optimizer = optim.SGD(net.parameters(), lr=1e-2, weight_decay=5e-4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch: 0, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 1, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 2, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 3, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 4, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 5, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 6, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 7, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 8, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 9, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 10, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 11, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 12, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 13, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 14, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 15, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 16, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 17, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 18, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 19, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 20, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 21, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 22, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 23, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 24, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 25, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 26, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 27, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 28, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 29, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 30, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 31, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 32, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 33, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 34, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 35, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 36, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 37, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 38, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 39, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 40, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 41, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 42, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 43, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 44, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 45, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 46, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 47, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 48, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 49, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 50, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 51, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 52, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 53, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 54, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 55, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 56, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 57, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 58, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 59, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 60, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 61, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 62, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 63, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 64, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 65, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 66, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 67, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 68, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 69, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 70, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 71, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 72, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 73, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 74, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 75, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 76, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 77, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 78, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 79, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 80, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 81, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 82, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 83, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 84, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 85, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 86, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 87, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 88, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 89, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 90, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 91, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 92, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 93, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 94, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 95, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 96, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 97, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 98, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 99, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 100, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 101, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 102, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 103, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 104, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 105, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 106, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 107, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 108, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 109, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 110, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 111, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 112, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 113, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 114, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch: 115, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 116, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 117, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 118, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 119, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 120, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 121, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 122, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 123, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 124, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 125, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 126, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 127, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 128, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 129, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 130, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 131, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 132, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 133, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 134, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 135, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 136, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 137, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 138, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 139, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 140, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 141, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 142, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 143, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 144, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 145, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 146, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 147, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 148, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 149, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 150, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 151, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 152, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 153, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 154, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 155, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 156, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 157, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 158, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 159, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 160, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 161, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 162, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 163, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 164, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 165, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 166, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 167, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 168, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 169, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 170, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 171, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 172, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 173, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 174, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 175, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 176, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 177, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 178, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 179, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 180, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 181, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 182, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 183, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 184, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 185, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 186, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 187, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 188, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 189, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 190, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 191, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 192, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 193, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 194, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 195, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 196, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 197, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 198, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 199, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 200, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 201, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 202, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 203, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 204, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 205, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 206, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 207, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 208, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 209, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 210, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 211, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 212, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 213, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 214, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 215, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 216, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 217, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 218, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 219, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 220, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 221, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 222, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 223, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 224, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 225, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 226, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 227, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 228, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 229, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 230, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 231, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 232, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 233, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 234, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 235, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 236, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 237, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 238, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 239, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 240, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 241, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 242, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 243, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 244, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch: 245, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 246, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 247, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 248, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 249, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 250, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 251, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 252, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 253, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 254, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 255, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 256, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 257, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 258, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 259, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 260, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 261, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 262, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 263, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 264, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 265, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 266, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 267, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 268, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 269, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 270, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 271, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 272, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 273, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 274, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 275, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 276, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 277, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 278, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 279, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 280, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 281, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 282, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 283, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 284, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 285, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 286, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 287, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 288, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 289, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 290, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 291, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 292, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 293, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 294, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 295, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 296, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 297, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 298, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 299, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 300, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 301, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 302, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 303, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 304, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 305, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 306, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 307, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 308, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 309, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 310, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 311, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 312, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 313, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 314, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 315, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 316, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 317, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 318, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 319, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 320, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 321, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 322, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 323, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 324, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 325, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 326, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 327, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 328, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 329, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 330, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 331, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 332, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 333, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 334, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 335, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 336, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 337, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 338, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 339, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 340, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 341, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 342, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 343, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 344, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 345, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 346, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 347, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 348, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 349, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 350, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 351, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch: 352, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 353, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 354, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 355, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 356, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 357, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 358, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 359, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 360, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 361, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 362, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 363, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 364, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 365, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 366, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 367, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 368, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 369, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 370, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 371, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 372, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 373, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 374, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 375, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 376, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 377, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 378, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 379, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 380, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 381, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 382, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 383, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 384, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 385, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 386, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 387, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 388, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 389, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 390, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 391, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 392, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 393, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 394, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 395, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 396, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 397, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 398, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 399, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 400, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 401, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 402, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 403, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 404, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 405, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 406, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 407, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 408, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 409, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 410, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 411, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 412, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 413, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 414, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 415, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 416, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 417, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 418, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 419, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 420, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 421, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 422, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 423, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 424, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 425, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 426, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 427, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 428, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 429, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 430, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 431, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 432, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 433, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 434, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 435, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 436, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 437, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 438, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 439, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 440, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 441, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 442, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 443, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 444, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 445, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 446, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 447, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 448, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 449, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 450, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 451, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 452, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 453, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 454, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 455, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 456, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 457, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 458, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 459, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 460, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 461, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 462, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 463, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 464, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 465, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 466, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 467, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 468, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 469, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 470, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 471, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 472, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 473, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 474, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 475, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 476, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 477, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 478, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 479, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 480, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 481, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 482, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 483, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 484, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 485, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 486, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 487, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 488, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 489, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 490, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 491, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 492, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 493, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 494, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 495, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 496, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 497, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 498, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 499, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 500, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 501, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 502, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 503, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 504, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 505, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 506, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 507, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 508, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 509, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 510, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 511, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 512, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 513, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 514, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 515, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 516, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 517, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 518, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 519, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 520, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 521, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 522, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 523, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 524, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 525, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 526, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 527, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 528, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 529, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 530, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 531, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 532, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 533, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 534, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 535, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 536, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 537, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 538, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 539, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 540, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 541, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 542, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 543, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 544, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 545, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 546, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 547, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 548, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 549, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 550, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 551, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 552, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 553, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 554, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 555, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 556, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 557, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 558, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 559, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 560, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 561, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 562, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 563, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 564, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 565, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 566, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 567, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 568, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 569, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 570, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 571, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 572, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 573, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 574, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 575, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 576, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 577, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 578, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 579, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 580, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 581, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 582, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch: 583, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 584, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 585, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 586, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 587, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 588, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 589, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 590, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 591, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 592, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 593, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 594, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 595, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 596, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 597, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 598, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 599, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 600, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 601, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 602, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 603, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 604, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 605, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 606, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 607, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 608, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 609, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 610, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 611, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 612, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 613, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 614, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 615, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 616, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 617, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 618, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 619, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 620, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 621, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 622, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 623, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 624, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 625, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 626, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 627, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 628, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 629, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 630, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 631, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 632, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 633, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 634, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 635, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 636, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 637, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 638, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 639, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 640, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 641, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 642, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 643, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 644, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 645, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 646, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 647, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 648, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 649, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 650, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 651, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 652, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 653, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 654, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 655, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 656, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 657, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 658, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 659, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 660, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 661, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 662, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 663, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 664, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 665, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 666, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 667, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 668, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 669, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 670, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 671, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 672, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 673, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 674, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 675, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 676, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 677, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 678, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 679, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 680, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 681, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 682, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 683, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 684, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 685, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 686, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 687, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 688, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 689, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 690, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 691, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 692, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 693, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 694, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 695, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 696, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 697, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 698, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 699, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 700, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 701, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 702, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 703, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 704, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 705, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 706, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 707, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 708, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 709, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch: 710, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 711, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 712, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 713, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 714, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 715, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 716, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 717, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 718, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 719, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 720, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 721, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 722, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 723, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 724, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 725, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 726, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 727, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 728, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 729, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 730, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 731, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 732, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 733, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 734, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 735, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 736, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 737, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 738, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 739, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 740, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 741, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 742, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 743, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 744, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 745, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 746, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 747, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 748, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 749, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 750, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 751, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 752, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 753, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 754, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 755, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 756, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 757, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 758, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 759, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 760, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 761, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 762, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 763, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 764, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 765, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 766, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 767, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 768, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 769, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 770, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 771, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 772, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 773, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 774, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 775, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 776, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 777, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 778, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 779, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 780, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 781, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 782, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 783, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 784, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 785, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 786, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 787, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 788, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 789, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 790, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 791, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 792, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 793, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 794, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 795, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 796, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 797, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 798, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 799, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 800, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 801, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 802, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 803, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 804, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 805, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 806, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 807, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 808, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 809, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 810, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 811, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 812, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 813, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 814, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 815, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 816, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 817, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 818, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 819, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 820, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 821, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 822, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 823, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 824, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 825, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 826, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 827, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 828, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 829, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 830, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 831, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 832, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 833, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 834, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch: 835, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 836, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 837, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 838, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 839, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 840, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 841, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 842, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 843, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 844, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 845, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 846, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 847, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 848, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 849, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 850, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 851, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 852, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 853, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 854, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 855, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 856, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 857, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 858, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 859, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 860, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 861, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 862, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 863, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 864, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 865, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 866, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 867, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 868, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 869, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 870, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 871, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 872, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 873, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 874, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 875, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 876, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 877, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 878, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 879, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 880, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 881, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 882, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 883, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 884, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 885, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 886, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 887, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 888, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 889, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 890, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 891, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 892, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 893, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 894, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 895, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 896, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 897, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 898, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 899, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 900, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 901, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 902, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 903, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 904, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 905, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 906, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 907, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 908, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 909, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 910, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 911, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 912, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 913, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 914, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 915, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 916, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 917, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 918, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 919, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 920, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 921, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 922, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 923, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 924, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 925, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 926, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 927, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 928, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 929, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 930, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 931, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 932, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 933, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 934, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 935, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 936, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
      "batch: 937, imgsize: torch.Size([32, 1, 28, 28]), labelsize: torch.Size([32])\n"
     ]
    }
   ],
   "source": [
    "# 观察train_data的形状\n",
    "for batch, (img, label) in enumerate(train_data): #938个batch\n",
    "    print('batch: %d, imgsize: %s, labelsize: %s' %(batch, img.size(), label.size()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([128, 1, 28, 28]), labelsize: torch.Size([128])\n",
      "imgsize: torch.Size([16, 1, 28, 28]), labelsize: torch.Size([16])\n"
     ]
    }
   ],
   "source": [
    " for img, label in test_data:\n",
    "    print('imgsize: {}, labelsize: {}'.format(img.size(), label.size()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[INFO] Epoch-1-Batch-200: Train: Loss-2.2906, Accuracy-0.0938\n",
      "[INFO] Epoch-1-Batch-400: Train: Loss-2.2434, Accuracy-0.5312\n",
      "[INFO] Epoch-1-Batch-600: Train: Loss-2.1683, Accuracy-0.5156\n",
      "[INFO] Epoch-1-Batch-800: Train: Loss-1.9786, Accuracy-0.4531\n",
      "[INFO] Epoch-1: Train: Loss-2.1569, Accuracy-0.3904 | Test: Loss-1.6268, Accuracy-0.6042\n",
      "[INFO] Epoch-2-Batch-200: Train: Loss-0.9912, Accuracy-0.7969\n",
      "[INFO] Epoch-2-Batch-400: Train: Loss-0.7699, Accuracy-0.7969\n",
      "[INFO] Epoch-2-Batch-600: Train: Loss-0.5318, Accuracy-0.8594\n",
      "[INFO] Epoch-2-Batch-800: Train: Loss-0.6052, Accuracy-0.8125\n",
      "[INFO] Epoch-2: Train: Loss-0.8349, Accuracy-0.7804 | Test: Loss-0.4916, Accuracy-0.8563\n",
      "[INFO] Epoch-3-Batch-200: Train: Loss-0.5878, Accuracy-0.8125\n",
      "[INFO] Epoch-3-Batch-400: Train: Loss-0.2680, Accuracy-0.9375\n",
      "[INFO] Epoch-3-Batch-600: Train: Loss-0.2278, Accuracy-0.9531\n",
      "[INFO] Epoch-3-Batch-800: Train: Loss-0.3496, Accuracy-0.8594\n",
      "[INFO] Epoch-3: Train: Loss-0.4365, Accuracy-0.8761 | Test: Loss-0.3731, Accuracy-0.8918\n",
      "[INFO] Epoch-4-Batch-200: Train: Loss-0.3770, Accuracy-0.9062\n",
      "[INFO] Epoch-4-Batch-400: Train: Loss-0.3836, Accuracy-0.8750\n",
      "[INFO] Epoch-4-Batch-600: Train: Loss-0.4062, Accuracy-0.9062\n",
      "[INFO] Epoch-4-Batch-800: Train: Loss-0.2710, Accuracy-0.9219\n",
      "[INFO] Epoch-4: Train: Loss-0.3595, Accuracy-0.8972 | Test: Loss-0.3323, Accuracy-0.9065\n",
      "[INFO] Epoch-5-Batch-200: Train: Loss-0.3890, Accuracy-0.8594\n",
      "[INFO] Epoch-5-Batch-400: Train: Loss-0.4306, Accuracy-0.8750\n",
      "[INFO] Epoch-5-Batch-600: Train: Loss-0.2331, Accuracy-0.8906\n",
      "[INFO] Epoch-5-Batch-800: Train: Loss-0.5788, Accuracy-0.8594\n",
      "[INFO] Epoch-5: Train: Loss-0.3194, Accuracy-0.9082 | Test: Loss-0.2926, Accuracy-0.9168\n",
      "[INFO] Epoch-6-Batch-200: Train: Loss-0.3499, Accuracy-0.9062\n",
      "[INFO] Epoch-6-Batch-400: Train: Loss-0.2902, Accuracy-0.9219\n",
      "[INFO] Epoch-6-Batch-600: Train: Loss-0.4068, Accuracy-0.9062\n",
      "[INFO] Epoch-6-Batch-800: Train: Loss-0.3378, Accuracy-0.9062\n",
      "[INFO] Epoch-6: Train: Loss-0.2882, Accuracy-0.9177 | Test: Loss-0.2682, Accuracy-0.9229\n",
      "[INFO] Epoch-7-Batch-200: Train: Loss-0.2954, Accuracy-0.9375\n",
      "[INFO] Epoch-7-Batch-400: Train: Loss-0.2031, Accuracy-0.9531\n",
      "[INFO] Epoch-7-Batch-600: Train: Loss-0.3132, Accuracy-0.9062\n",
      "[INFO] Epoch-7-Batch-800: Train: Loss-0.1354, Accuracy-0.9531\n",
      "[INFO] Epoch-7: Train: Loss-0.2606, Accuracy-0.9258 | Test: Loss-0.2417, Accuracy-0.9300\n",
      "[INFO] Epoch-8-Batch-200: Train: Loss-0.1411, Accuracy-0.9688\n",
      "[INFO] Epoch-8-Batch-400: Train: Loss-0.1754, Accuracy-0.9219\n",
      "[INFO] Epoch-8-Batch-600: Train: Loss-0.1472, Accuracy-0.9531\n",
      "[INFO] Epoch-8-Batch-800: Train: Loss-0.2807, Accuracy-0.9219\n",
      "[INFO] Epoch-8: Train: Loss-0.2359, Accuracy-0.9330 | Test: Loss-0.2156, Accuracy-0.9377\n",
      "[INFO] Epoch-9-Batch-200: Train: Loss-0.1514, Accuracy-0.9375\n",
      "[INFO] Epoch-9-Batch-400: Train: Loss-0.1897, Accuracy-0.9531\n",
      "[INFO] Epoch-9-Batch-600: Train: Loss-0.2867, Accuracy-0.8906\n",
      "[INFO] Epoch-9-Batch-800: Train: Loss-0.3175, Accuracy-0.9531\n",
      "[INFO] Epoch-9: Train: Loss-0.2136, Accuracy-0.9392 | Test: Loss-0.1974, Accuracy-0.9430\n",
      "[INFO] Epoch-10-Batch-200: Train: Loss-0.3684, Accuracy-0.9219\n",
      "[INFO] Epoch-10-Batch-400: Train: Loss-0.2939, Accuracy-0.9219\n",
      "[INFO] Epoch-10-Batch-600: Train: Loss-0.1633, Accuracy-0.9531\n",
      "[INFO] Epoch-10-Batch-800: Train: Loss-0.2214, Accuracy-0.9219\n",
      "[INFO] Epoch-10: Train: Loss-0.1938, Accuracy-0.9450 | Test: Loss-0.1805, Accuracy-0.9462\n",
      "[INFO] Epoch-11-Batch-200: Train: Loss-0.0930, Accuracy-0.9844\n",
      "[INFO] Epoch-11-Batch-400: Train: Loss-0.1655, Accuracy-0.9375\n",
      "[INFO] Epoch-11-Batch-600: Train: Loss-0.1799, Accuracy-0.9531\n",
      "[INFO] Epoch-11-Batch-800: Train: Loss-0.1120, Accuracy-0.9688\n",
      "[INFO] Epoch-11: Train: Loss-0.1773, Accuracy-0.9491 | Test: Loss-0.1728, Accuracy-0.9489\n",
      "[INFO] Epoch-12-Batch-200: Train: Loss-0.0550, Accuracy-1.0000\n",
      "[INFO] Epoch-12-Batch-400: Train: Loss-0.1641, Accuracy-0.9219\n",
      "[INFO] Epoch-12-Batch-600: Train: Loss-0.1844, Accuracy-0.9375\n",
      "[INFO] Epoch-12-Batch-800: Train: Loss-0.2422, Accuracy-0.9375\n",
      "[INFO] Epoch-12: Train: Loss-0.1623, Accuracy-0.9538 | Test: Loss-0.1555, Accuracy-0.9532\n",
      "[INFO] Epoch-13-Batch-200: Train: Loss-0.1045, Accuracy-0.9531\n",
      "[INFO] Epoch-13-Batch-400: Train: Loss-0.0446, Accuracy-1.0000\n",
      "[INFO] Epoch-13-Batch-600: Train: Loss-0.1279, Accuracy-0.9688\n",
      "[INFO] Epoch-13-Batch-800: Train: Loss-0.1203, Accuracy-0.9531\n",
      "[INFO] Epoch-13: Train: Loss-0.1500, Accuracy-0.9572 | Test: Loss-0.1449, Accuracy-0.9573\n",
      "[INFO] Epoch-14-Batch-200: Train: Loss-0.1468, Accuracy-0.9531\n",
      "[INFO] Epoch-14-Batch-400: Train: Loss-0.3259, Accuracy-0.9375\n",
      "[INFO] Epoch-14-Batch-600: Train: Loss-0.1104, Accuracy-0.9844\n",
      "[INFO] Epoch-14-Batch-800: Train: Loss-0.1274, Accuracy-0.9844\n",
      "[INFO] Epoch-14: Train: Loss-0.1393, Accuracy-0.9603 | Test: Loss-0.1372, Accuracy-0.9596\n",
      "[INFO] Epoch-15-Batch-200: Train: Loss-0.1234, Accuracy-0.9844\n",
      "[INFO] Epoch-15-Batch-400: Train: Loss-0.1237, Accuracy-0.9688\n",
      "[INFO] Epoch-15-Batch-600: Train: Loss-0.1289, Accuracy-0.9531\n",
      "[INFO] Epoch-15-Batch-800: Train: Loss-0.0758, Accuracy-0.9844\n",
      "[INFO] Epoch-15: Train: Loss-0.1299, Accuracy-0.9628 | Test: Loss-0.1291, Accuracy-0.9615\n",
      "[INFO] Epoch-16-Batch-200: Train: Loss-0.0474, Accuracy-1.0000\n",
      "[INFO] Epoch-16-Batch-400: Train: Loss-0.1658, Accuracy-0.9531\n",
      "[INFO] Epoch-16-Batch-600: Train: Loss-0.2158, Accuracy-0.9375\n",
      "[INFO] Epoch-16-Batch-800: Train: Loss-0.2435, Accuracy-0.9531\n",
      "[INFO] Epoch-16: Train: Loss-0.1211, Accuracy-0.9657 | Test: Loss-0.1250, Accuracy-0.9625\n",
      "[INFO] Epoch-17-Batch-200: Train: Loss-0.0495, Accuracy-0.9844\n",
      "[INFO] Epoch-17-Batch-400: Train: Loss-0.1548, Accuracy-0.9531\n",
      "[INFO] Epoch-17-Batch-600: Train: Loss-0.0797, Accuracy-0.9688\n",
      "[INFO] Epoch-17-Batch-800: Train: Loss-0.1344, Accuracy-0.9531\n",
      "[INFO] Epoch-17: Train: Loss-0.1134, Accuracy-0.9682 | Test: Loss-0.1146, Accuracy-0.9656\n",
      "[INFO] Epoch-18-Batch-200: Train: Loss-0.1823, Accuracy-0.9375\n",
      "[INFO] Epoch-18-Batch-400: Train: Loss-0.0552, Accuracy-1.0000\n",
      "[INFO] Epoch-18-Batch-600: Train: Loss-0.0524, Accuracy-0.9844\n",
      "[INFO] Epoch-18-Batch-800: Train: Loss-0.0389, Accuracy-0.9844\n",
      "[INFO] Epoch-18: Train: Loss-0.1067, Accuracy-0.9696 | Test: Loss-0.1119, Accuracy-0.9677\n",
      "[INFO] Epoch-19-Batch-200: Train: Loss-0.0666, Accuracy-0.9844\n",
      "[INFO] Epoch-19-Batch-400: Train: Loss-0.1676, Accuracy-0.9531\n",
      "[INFO] Epoch-19-Batch-600: Train: Loss-0.1910, Accuracy-0.9375\n",
      "[INFO] Epoch-19-Batch-800: Train: Loss-0.0369, Accuracy-1.0000\n",
      "[INFO] Epoch-19: Train: Loss-0.1009, Accuracy-0.9712 | Test: Loss-0.1057, Accuracy-0.9687\n",
      "[INFO] Epoch-20-Batch-200: Train: Loss-0.0425, Accuracy-1.0000\n",
      "[INFO] Epoch-20-Batch-400: Train: Loss-0.1183, Accuracy-0.9688\n",
      "[INFO] Epoch-20-Batch-600: Train: Loss-0.0654, Accuracy-0.9688\n",
      "[INFO] Epoch-20-Batch-800: Train: Loss-0.0549, Accuracy-1.0000\n",
      "[INFO] Epoch-20: Train: Loss-0.0947, Accuracy-0.9733 | Test: Loss-0.1072, Accuracy-0.9688\n"
     ]
    }
   ],
   "source": [
    "# 训练\n",
    "losses = []  # 记录训练损失\n",
    "acces = []  # 记录训练精度\n",
    "eval_losses = []  # 记录测试损失\n",
    "eval_acces = []   # 记录测试精度\n",
    "\n",
    "nums_epoch = 20\n",
    "for epoch in range(nums_epoch):\n",
    "    train_loss = 0\n",
    "    train_acc = 0\n",
    "    net = net.train()\n",
    "    for batch, (img, label) in enumerate(train_data): # 938个batch，每个batch包含64张图像\n",
    "        # batch: 0, imgsize: torch.Size([64, 1, 28, 28]), labelsize: torch.Size([64])\n",
    "        img = img.reshape(img.size(0), -1) # img.size(0)=64， img(64, 784)\n",
    "        img = Variable(img)\n",
    "        label = Variable(label)\n",
    "        \n",
    "        # forward propagation\n",
    "        out = net.forward(img)\n",
    "        loss = criterion(out, label)  # 一维tensor\n",
    "        \n",
    "        # back propagation\n",
    "        optimizer.zero_grad() # w,b的值更新后，下一个batch的w,b的梯度导数置0\n",
    "        loss.backward() # 反向传播\n",
    "        optimizer.step() # 更新w,b\n",
    "        \n",
    "        # 记录误差\n",
    "        train_loss += loss.item()\n",
    "        # 计算分类的准确率\n",
    "        _,pred = out.max(1) # 横向求最大，tensor.max会输出两种数据，values & indices。\n",
    "        # values是指具体预测的数值（百分比概率），indices指具体的最大值所在的位置索引\n",
    "        num_correct = (pred == label).sum().item() # item()是将一维tensor转为int\n",
    "        acc = num_correct / img.shape[0] # img.shape[0]是batch_size\n",
    "        \n",
    "        if (batch + 1) % 200 == 0: # 每200个batch，print一次\n",
    "            print('[INFO] Epoch-{}-Batch-{}: Train: Loss-{:.4f}, Accuracy-{:.4f}'.format(\n",
    "            epoch+1, batch+1, loss.item(), acc))\n",
    "            \n",
    "        train_acc += acc # 更新每个epoch的accuracy\n",
    "        \n",
    "    losses.append(train_loss / len(train_data)) # 平均每张图的训练loss\n",
    "    acces.append(train_acc / len(train_data))   # 平均每张图的训练accuracy\n",
    "    \n",
    "    eval_loss = 0\n",
    "    eval_acc = 0\n",
    "    \n",
    "    # 每个epoch进行一次测试，不训练\n",
    "    for img, label in test_data:\n",
    "        img = img.reshape(img.size(0), -1)\n",
    "        img = Variable(img)\n",
    "        label = Variable(label)\n",
    "        \n",
    "        out = net.forward(img)\n",
    "        loss = criterion(out, label)\n",
    "        eval_loss += loss.item()\n",
    "        \n",
    "        _, pred = out.max(1)\n",
    "        num_correct = (pred == label).sum().item()\n",
    "        acc = num_correct/img.shape[0]\n",
    "        \n",
    "        eval_acc += acc\n",
    "    \n",
    "    eval_losses.append(eval_loss / len(test_data))\n",
    "    eval_acces.append(eval_acc / len(test_data))\n",
    "    \n",
    "    print('[INFO] Epoch-{}: Train: Loss-{:.4f}, Accuracy-{:.4f} | Test: Loss-{:.4f}, Accuracy-{:.4f}'.format(\n",
    "    epoch+1, train_loss / len(train_data), train_acc / len(train_data), eval_loss / len(test_data), \n",
    "        eval_acc / len(test_data)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化\n",
    "plt.figure()\n",
    "plt.suptitle('Test', fontsize=12)\n",
    "ax1 = plt.subplot(1,2,1)\n",
    "ax1.plot(eval_losses, color='r')\n",
    "ax1.plot(losses, color='b')\n",
    "ax1.set_title('Loss', fontsize=10, color='black')\n",
    "ax2 = plt.subplot(1,2,2)\n",
    "ax2.plot(eval_acces, color='r')\n",
    "ax2.plot(acces, color='b')\n",
    "ax2.set_title('Acc', fontsize=10, color='black')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
